package com.yww.leetcode2.array;

/**
 * @author yww
 * @description 59. 螺旋矩阵 II
 * @since 2024/10/31
 */
public class GenerateMatrix59_05 {
    public int[][] generateMatrix(int n) {
        int[][] matrix = new int[n][n];
        // 每次旋转的起点
        int startX = 0, startY = 0;
        // 每次旋转的终点（每条边都不处理最后一个元素，留给下一个边处理）
        int offset = 1;
        // 每个格子的赋值
        int count = 1;
        // 要螺旋式旋转 n / 2 圈
        int turns = n / 2;
        while (turns-- > 0) {
            int j = startY;
            int i = startX;
            // 处理 第一边 →
            for (; j < n - offset; j++) {
                matrix[startX][j] = count++;
            }
            // 处理 第二边 ↓
            for (; i < n - offset; i++) {
                matrix[i][j] = count++;
            }
            // 处理 第三边 ←
            for (; j > startY; j--) {
                matrix[i][j] = count++;
            }
            // 处理 第四边 ↑
            for (; i > startX; i--) {
                matrix[i][j] = count++;
            }
            startX++;
            startY++;
            offset++;
            // 如果 n 是基数，还有一个中间节点待处理
        }
        if (n % 2 == 1) {
            matrix[startX][startY] = count;
        }
        return matrix;
    }
}
